﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>ComObjConnect()</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/default.css" rel="stylesheet" type="text/css">
</head>
<body>

<h1>ComObjConnect() <span class="ver">[AHK_L 53+]</span></h1>
<p>连接对象的事件源到带有指定前缀的函数.</p>
<pre class="Syntax">ComObjConnect(ComObject [, Prefix])</pre>

<h3>参数</h3>
<table class="info">
  <tr>
    <td>ComObject</td>
    <td>产生事件的对象.</td>
  </tr>
  <tr>
    <td>Prefix</td>
    <td>用于判断当事件发生时应调用哪个函数的事件名称前缀的字符串.<br />如果完全省略, 则对象为 &quot;未连接的&quot;; 即脚本将不再接收其事件通告.</td>
  </tr>
</table>

<h3 id="Usage">用法</h3>
<p>为了让 ComObjConnect 有意义, 首先您必须在脚本中编写处理任何感兴趣事件的函数.这类函数, 或称为 &quot;事件处理程序,&quot; 具有下列结构:</p>
<pre class="Syntax Short NoIndent"><i>Prefix</i><b>EventName</b>([<i>Params...</i>, ComObject])
{
    <i class="dull">... event-handling code ...</i>
    return <i>returnValue</i>
}</pre>
<p><I>Prefix</I> 为您选择的前缀, 而 <B>EventName</B> 为函数需要处理的每种事件的名称.</p>
<p><i>Params</i> 对应于事件包含的任何参数.如果事件不含有参数, <i>Params</i> 应该完全省略.<i>ComObject</i> 是可选的, 并且可以仅在定义的 <i>Params</i> 数目正确时使用; 它包含了传递给 ComObjConnect 的原始包装器对象的引用.&quot;ComObject&quot; 应该替换为与您脚本上下文相关的更有意义的名称.</p>
<p>注意事件处理程序可以产生返回值.要返回特定 COM 类型的值, 请使用 <a href="ComObjActive.htm#param">ComObjParameter</a>, 它也可以写成 <code>ComObjRetVal(type, value)</code> 或简化为 <code>ComObj(type, value)</code>.</p>
<p>调用 <code>ComObjConnect(yourObject, "<i>Prefix</i>")</code> 来启用事件处理.</p>
<p>调用 <code>ComObjConnect(yourObject)</code> 来断开到对象的连接 (停止处理事件).</p>
<p>如果参数的数目未知, 可以使用 <a href="../Functions.htm#Variadic">可变参数函数</a>.</p>

<h3>相关</h3>
<p><a href="ComObjCreate.htm">ComObjCreate</a>, <a href="ComObjGet.htm">ComObjGet</a>, <a href="ComObjActive.htm">ComObjActive</a>, <a href="ComObjConnect.htm">ComObjConnect</a>, <a href="ComObjError.htm">ComObjError</a>, <a href="http://msdn.microsoft.com/en-us/library/ccxe1xe6.aspx">WScript.ConnectObject (MSDN)</a></p>

<h3 id="Examples">示例</h3>
<pre class="NoIndent">
ie := ComObjCreate("<a href="http://msdn.microsoft.com/en-us/library/aa752084.aspx">InternetExplorer.Application</a>")

<em>; 连接事件到带有 &quot;IE_&quot; 前缀的相应脚本函数.</em>
<b>ComObjConnect</b>(ie, "IE_")

ie.Visible := true  <em>; 这个语句在 IE7 中无法正常执行.</em>
ie.Navigate("http://www.autohotkey.net/~Lexikos/AutoHotkey_L/")
#Persistent

<b>IE_<a href="http://msdn.microsoft.com/en-us/library/aa768329.aspx">DocumentComplete</a></b>(ieEventParam, url, ieFinalParam) {
    global ie
    if (ie != ieEventParam)
        s .= <em>&quot;First parameter is a new wrapper object.`n&quot;</em>
    if (ie == ieFinalParam)
        s .= <em>&quot;Final parameter is the original wrapper object.`n&quot;</em>
    if ((disp1:=<a href="ComObjActive.htm#enwrap">ComObjUnwrap</a>(ieEventParam)) == (disp2:=ComObjUnwrap(ieFinalParam)))
        s .= <em>&quot;Both wrapper objects refer to the same IDispatch instance.`n&quot;</em>
    <a href="ObjAddRef.htm">ObjRelease</a>(disp1), ObjRelease(disp2)
    MsgBox % s . "Finished loading " ie.Document.title " @ " url
    ie.Quit()
    ExitApp
}
</pre>

</body>
</html>
